package estacionamientoprincipal;
public class estacionamiento {
	
	private int []autos;
	private int indice;
	
	public estacionamiento(int n){
		autos = new int[n];
		indice =-1;
	}
	
	public void ImprimeDatos(String hilo){
                System.out.println(hilo + ": ");
		for(int i=0; i <= indice; i++)
			System.out.print(autos[i]+" <-- ");
		System.out.println();
	}
        
        public void ImprimeEstacionamiento(String hilo, estacionamiento est){
                System.out.println(hilo + ": ");
		for(int i=0; i <= est.indice; i++)
			System.out.print("[" + autos[i]+"]");
		System.out.println();
	}
	
	public synchronized void formaAutoFila(String hilo){
		while (indice >= autos.length-1){
			try{
                            wait();
			}catch (InterruptedException E){}
		}
		indice++;
		autos[indice]= (int)(Math.random()*1000000);
		ImprimeDatos(hilo);
		notifyAll();
	}
	
        public synchronized void entraAutoEstacionamiento(String hilo, estacionamiento est){
		while(est.indice >= est.autos.length-1){
			try{
                        System.out.println("\nEl estacionamiento esta lleno");
			wait();
			}catch(InterruptedException e){}
		}     
                est.indice++;
                est.autos[est.indice]=autos[0];
                indice--;
                for(int i=0; i<=indice-1;i++)
                    autos[indice]=autos[indice+1];     
		ImprimeEstacionamiento(hilo, est);
		notifyAll();
	}
        
	public synchronized void saleAutoEstacionamiento(String hilo){
		while(indice<=0){       
                    try{ 
                    System.out.println("\nEl estacionamiento esta vacio");
                            wait();
                    }catch(InterruptedException e){}
		}
                System.out.println("\nEl auto de placa ["+autos[indice]+"] salio del estacionamiento");
                indice--;
                for(int i=0; i<=indice-1;i++){
                    autos[indice]=autos[indice+1];
                }
		notifyAll();
	}
        
}